레이블 인코딩
레이블 인코
개요
레이블 인딩(Label Encoding)은 머신닝 및 데이터 과학 분야에서 범주형 데이터(categorical data)를델이 처리할 수 있는 수치형 데이터로 변환하는 대표적인 전처리 기법 중 하나입니다. 범주형 변수는 일반적으로 텍스트 형태의 값(예: '남성', '여성', '서울', '부산')으로 구성되어 있으며, 대부분의 머신러닝 알고리즘은 이러한 문자 데이터를 직접 처리할 수 없습니다. 따라서 레이블 인코딩을 통해 각 범주(category)에 고유한 정수 값을 할당함으로써 수치화하는 과정이 필요합니다.
레이블 인코딩은 특히 순서가 없는 명목형 변수(nominal variable)보다는 순서가 있는 순위형 변수(ordinal variable)에 적합하지만, 단순한 수치화를 위해 명목형 변수에도 자주 사용됩니다. 다만, 이 방법은 인코딩된 수치 값에 임의의 순서를 부여할 수 있어 주의가 필요합니다.
레이블 인코딩의 원리
기본 개념
레이블 인코딩은 각 고유한 범주에 0부터 시작하는 정수 값을 순차적으로 할당합니다. 예를 들어, 다음과 같은 범주형 데이터가 있다고 가정해 봅시다:
성별 |
---|
남성 |
여성 |
남성 |
기타 |
이 경우 레이블 인코딩은 각 범주에 다음과 같이 정수를 매핑할 수 있습니다:
- 남성 → 0
- 여성 → 1
- 기타 → 2
결과적으로 데이터는 다음과 같이 변환됩니다:
성별 |
---|
0 |
1 |
0 |
2 |
이러한 변환을 통해 머신러닝 모델이 범주형 데이터를 입력값으로 사용할 수 있게 됩니다.
인코딩의 순서
레이블 인코딩은 일반적으로 사전순(order lexicographical)으로 범주를 정렬한 후, 0부터 순차적으로 번호를 부여합니다. 따라서 위 예시에서 "기타", "남성", "여성" 순으로 정렬된다면 각각 0, 1, 2가 할당될 수 있습니다. 이 순서는 임의일 수 있으며, 데이터의 의미와 무관할 수 있으므로 주의가 필요합니다.
레이블 인코딩의 활용
머신러닝 전처리
대부분의 머신러닝 알고리즘(예: 선형 회귀, 결정 트리, 서포트 벡터 머신 등)은 수치형 입력을 요구합니다. 따라서 범주형 피처를 처리하기 위해 레이블 인코딩이 자주 사용됩니다.
순위형 변수 처리
레이블 인코딩은 순위가 있는 데이터(예: '낮음', '중간', '높음')에 특히 적합합니다. 이 경우 수치 값의 대소관계가 의미를 가지므로, 예를 들어:
- 낮음 → 0
- 중간 → 1
- 높음 → 2
와 같이 인코딩하면 모델이 "높음"이 "낮음"보다 더 크다는 의미를 학습할 수 있습니다.
레이블 인코딩의 장단점
장점
- 간단하고 직관적: 구현이 쉽고, 계산 비용이 낮음.
- 메모리 효율적: 원-핫 인코딩과 달리 추가 컬럼을 생성하지 않아 메모리 사용이 적음.
- 순위 정보 보존 가능: 순위형 변수의 경우 수치의 순서가 의미를 가질 수 있음.
단점
- 의도하지 않은 순서 생성: 명목형 변수(예: 도시 이름)에 적용할 경우, 0 < 1 < 2라는 수치적 순서가 모델에 잘못 해석될 수 있음. 이는 모델이 범주 간에 계층적 관계가 있다고 잘못 판단할 수 있음을 의미합니다.
- 비대칭성: 각 범주가 동등한 거리로 간주되지 않음. 예를 들어, 0과 1의 차이가 1과 2의 차이와 동일하다고 가정하는 문제가 있음.
🔍 예시: '서울'이 0, '부산'이 1, '대구'가 2로 인코딩되면, 모델은 '서울'과 '부산'의 거리가 '부산'과 '대구'보다 가깝다고 잘못 인식할 수 있습니다. 그러나 이는 실제 의미와 무관합니다.
레이블 인코딩 vs 원-핫 인코딩
구분 | 레이블 인코딩 | 원-핫 인코딩(One-Hot Encoding) |
---|---|---|
인코딩 방식 | 각 범주에 정수 할당 | 각 범주마다 새로운 이진 열 생성 |
차원 증가 | 없음 | 범주의 수만큼 열 증가 |
순서 정보 | 암시적 생성 가능 | 없음 (모든 범주 동등) |
적합한 데이터 | 순위형 변수 | 명목형 변수 |
단점 | 수치적 순서 오해 가능성 | 차원 폭발(dimensionality explosion) 문제 |
파이썬에서의 구현 예시
Python의 대표적인 데이터 과학 라이브러리인 [scikit-learn](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%8C%8C%EC%9D%B4%EC%8D%AC/scikit-learn)
과 [pandas](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%8C%8C%EC%9D%B4%EC%8D%AC/pandas)
를 사용하여 레이블 인코딩을 쉽게 수행할 수 있습니다.
scikit-learn 사용
from sklearn.preprocessing import LabelEncoder
import pandas as pd
# 샘플 데이터
data = pd.DataFrame({'성별': ['남성', '여성', '남성', '기타', '여성']})
# 레이블 인코더 생성 및 적용
le = LabelEncoder()
data['성별_encoded'] = le.fit_transform(data['성별'])
print(data)
결과:
성별 성별_encoded
0 남성 1
1 여성 2
2 남성 1
3 기타 0
4 여성 2
⚠️ 주의:
LabelEncoder
는 내부적으로 사전순으로 라벨을 정렬하므로, 실제 인코딩 값은 실행 환경에 따라 다를 수 있습니다.
pandas 사용
data['성별_encoded'] = data['성별'].astype('category').cat.codes
이 방법도 간단히 레이블 인코딩을 수행할 수 있습니다.
주의사항 및 대안
- 명목형 변수에는 원-핫 인코딩 또는 타깃 인코딩을 고려하세요.
- 범주의 수가 매우 많은 경우(high cardinality), 임베딩(embedding) 또는 해싱 기법을 사용하는 것이 효과적일 수 있습니다.
- 모델의 해석 가능성을 고려할 때, 인코딩 방식의 선택은 모델 성능과 해석에 큰 영향을 미칩니다.
관련 문서 및 참고 자료
- One-Hot Encoding
- Ordinal Encoding
- Scikit-learn LabelEncoder Documentation
- 데이터 전처리(Data Preprocessing)
- 범주형 변수(Categorical Variable)
레이블 인코딩은 데이터 과학 프로젝트에서 필수적인 전처리 단계 중 하나이지만, 그 사용 맥락을 정확히 이해하고 적절히 적용하는 것이 중요합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.